package abstractfactory;

import abstractfactory.abstractfactory.AbstractFactory;
import abstractfactory.concretefactory.BlackHumanFactory;
import abstractfactory.county.ChinaHuman;

/**
 * @author heyuduo
 * @date 2022/7/3 23:16
 * <p>
 * 暴露给外部的是接口，而不是内在实现，同样，方法也是由接口或者抽象类暴露，而不是具体实现类。
 * 工厂模式 == 工厂创建对象 + 对象的定义逻辑
 * 上述两者是分离的，比如工厂只是用来创建人类，而Human接口是男人和女人、黄黑白人种的顶级父类，工厂和Human通过内部具体工厂的实现类进行交互，
 * 而不是直接与最外层进行交互。
 */
public class NvWA {
    public static void main(String[] args) {
        AbstractFactory ChainFactory = new ChinaHuman();
        ChainFactory.createMan();
        ChainFactory.createWoman();

        AbstractFactory blackHuman = new BlackHumanFactory();
        blackHuman.createWoman();
        blackHuman.createMan();
    }
}
